<?php

class RecoveryController extends UserController {

    protected $recovery_url_key = '/user/recovery/reset';


    
	public function actionIndex() {
		$this->pageTitle= Yii::t('app', 'Восстановление пароля');
        $model = new RecoveryForm();
        if(isset($_POST['RecoveryForm'])) {
            $model->attributes=$_POST['RecoveryForm'];
            if ($model->validate()) {
                $model->user->hkey = UserModule::encrypting(microtime());
                if ($model->user->save()) {
                    $recovery_url = $this->createAbsoluteUrl($this->recovery_url_key,array("k" => $model->user->hkey, "email" => $model->user->username));
                    $mail_path = Yii::app()->mail->viewPath;
                    Yii::app()->mail->viewPath = 'application.modules.user.views.recovery';
                    //sent to user
                    $message = new YiiMailMessage;
                    $message->view = 'email_recovery_user';
                    $message->setBody(array('title' => UserModule::t('Восстановление пароля') , 'model'=>$model->user, 'url' => $recovery_url), 'text/html');
                    $message->addTo($model->user->username);
                    $message->setSubject(UserModule::t('Запрос на восстановление пароля'));
                    $message->from = Yii::app()->params['systemEmail'];
                    Yii::app()->mail->send($message);

                    //sent to special person
                    $sysmessage = new YiiMailMessage;
                    $sysmessage->view = 'email_recovery_admin';
                    $sysmessage->setBody(array('title' => UserModule::t('Восстановление пароля'), 'model'=>$model->user), 'text/html');
                    $sysmessage->addTo(Yii::app()->params['adminEmail']);
                    $sysmessage->setSubject(UserModule::t('Запрос на восстановление пароля'));
                    $sysmessage->from = Yii::app()->params['systemEmail'];
                    Yii::app()->mail->send($sysmessage);                            
                    
                    Yii::app()->mail->viewPath = $mail_path;    
                    $this->redirect(array('/user/recovery/sent'));
                }
            }
        }
        $this->render('index',array('model'=>$model));
	}

    public function actionSent() {
		$this->pageTitle= Yii::t('app', 'Восстановление пароля');
        $this->render('response', array('title' => UserModule::t('Запрос на восстановление пароля отправлен успешно'), 
        'message' => UserModule::t('Пожалуйста, проверьте вашу почту и следуйте инструкциям, указанным в письме.')));
    }    
    

    public function actionReset() {
		$this->pageTitle= Yii::t('app', 'Восстановление пароля');
        $model = new ResetPasswordForm();
        $error = '';
        $email = isset($_GET['email']) ? $_GET['email'] : (isset($_POST['ResetPasswordForm']['email']) ? $_POST['ResetPasswordForm']['email'] : '');
        $k = isset($_GET['k']) ? $_GET['k'] : (isset($_POST['ResetPasswordForm']['k']) ? $_POST['ResetPasswordForm']['k'] : '');
        $model->email = $email;
        $model->k = $k;
        if (('' != $email && '' != $k)) {
			$find = Users::model()->findByAttributes(array('username'=>$email, 'hkey' => $k));
            if (null === $find) {
                $error = UserModule::t('Данные не найдеены. Или устарели.');
            }
            
            if (isset($_POST['ResetPasswordForm']) && '' == $error) {
                $model->attributes=$_POST['ResetPasswordForm'];
                if ($model->validate() && '' == $error) {
                    $find->password = UserModule::encrypting($model->newPassword);
                    $find->hkey = UserModule::encrypting(microtime());
                    $find->save();
                    $this->redirect(array('/user/recovery/success'));
                }
            }
        } else {
            $error = UserModule::t('Данные о восстановлении пароля повреждены или неверны.');
        }
        
        $this->render('reset',array('model'=>$model, 'error' => $error));
    }
 
    public function actionSuccess() {
		$this->pageTitle= Yii::t('app', 'Восстановление пароля');
        $this->render('response', array('title' => UserModule::t('Восстановление пароля прошло успешно'), 
        'message' => UserModule::t('Пароль изменен успешно.')));
    }
 
}

?>